package com.it.service.impl;

import com.it.dao.UserDao;
import com.it.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Service;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.annotation.Resource;
@Scope("singleton")//相当于bean的Scope标签，使用位置创建类上，指定作用范围
@Service("userService")//服务层id注解 value就是xml bean对象的id
public class UserServiceImpl implements UserService {
    @Value("${jdbc.userName}")
    private String userName;
    @Value("${jdbc.passWorld}")
    private String passWorld;
//required = false 注入失败报nullpointExperience错误
    /*@Autowired(required = false)优先根据类型装配，如果容器中注入的bean有多个，则配合@Qualifier使用，
                                    IOC容器注入的bean只有一个，则推荐使用    required = true默认值（必须注入成功，否则报错）
    @Qualifier("userDao")*/
    @Resource(name = "userDao")//IOC容器出现多个相同类型的bean，则推荐使用
    private UserDao dao;

    public UserServiceImpl() {
        System.out.println("userService init...");
    }
    @PostConstruct//作用在初始化方法上，相当于bean的init-method方法，指定bean对象的初始化方法
    public void inits() {
        System.out.println("init....");
    }

    public void add() {
//        System.out.println("add run ....");
        dao.add();
    }


    @PreDestroy//作用在销毁方法上指定销毁方法  destory-method标签
    public void destory() {
        System.out.println("destory...");
    }

    @Override
    public String toString() {
        return "UserServiceImpl{" +
                "userName='" + userName + '\'' +
                ", passWorld='" + passWorld + '\'' +
                '}';
    }
}
